Since its discovery in the 1950s, Breadth-First Search (BFS) has been used to traverse graphs, progressing from a source vertex by expanding a neighborhood around unique vertices encountered at the same distance from the source vertex. Because numerous types of data can be modeled as graph data structures, various data structures and computing architectures have been used to create various implementations of BFS for different applications. Computational considerations have included total space and time required to perform the search. Time/space tradeoffs have also implicated cost tradeoffs of providing larger random-access memories at greater cost, or utilizing cheaper, disk-based storage, but at a significant time penalty for each access. Some implementations have also included parallel processing techniques, where greater upfront cost for processing hardware and inter-processor communication overhead are accepted in return for increased processing speed.